home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 2 / Gekikoh Dennoh Club Vol. 2 (Japan).7z / Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin / tools / ldbmp08 / ldbmp08s.lzh / LDBMP16.S < prev    next >
Text File  |  1997-09-28  |  2KB  |  123 lines

  1. *****************************************************************
  2. *    32k色のBMP(Win95 卒業II用)                *
  3. *****************************************************************
  4.     .include    doscall.mac
  5.     .include    iocscall.mac
  6.     .include    myconst.h
  7.  
  8.     .xdef    _Bit16_conv
  9.  
  10.     .xref    gr_addr
  11.     .xref    tate
  12.     .xref    yoko
  13.     .xref    line_byte
  14.     .xref    nflg
  15.  
  16.     .text
  17.     .even
  18.  
  19. _Bit16_conv:
  20.     bsr    irohen16
  21.     tst.b    nflg
  22.     beq    _Bit16_conv_
  23.     bsr    hanten
  24. _Bit16_conv_:
  25.     rts
  26.  
  27. irohen16:
  28.     movea.l    gr_addr(pc),a0        *変換元
  29.     movea.w    line_byte(pc),a3
  30.  
  31.     move.w    yoko(pc),d0        *変換数
  32.     move.w    tate(pc),d1
  33.  
  34.     move.w    #%0000_0000_0111_1100,d5
  35.     move.w    #%1110_0000_0000_0011,d6
  36.     move.w    #%0001_1111_0000_0000,d7
  37.  
  38.     subq.w    #1,d0
  39.     movea.w    d0,a2
  40.     subq.w    #1,d1
  41.  
  42. irohen16_1:
  43.     move.l    a2,d0
  44.     movea.l    a0,a1
  45.  
  46. irohen16_2:
  47.     move.w    (a1),d2
  48.     move.w    d2,d3
  49.     move.w    d2,d4
  50.     and.w    d5,d2        *R
  51.     and.w    d6,d3        *G
  52.     and.w    d7,d4        *B
  53.  
  54.     rol.w    #4,d2
  55.     ror.w    #2,d3
  56.     ror.w    #7,d4
  57.  
  58.     or.w    d3,d2        *RGB ->GRB
  59.     or.w    d4,d2
  60.     move.w    d2,(a1)+
  61.     dbra.w    d0,irohen16_2
  62.     adda.l    a3,a0
  63.     dbra.w    d1,irohen16_1
  64.     rts
  65.  
  66.  
  67. hanten:
  68.     movea.l    gr_addr(pc),a0        *転送元1
  69.  
  70.     move.w    tate(pc),d0        *転送元2 (tate-1)*line_byte
  71.     subq.w    #1,d0
  72.     mulu.w    line_byte(pc),d0
  73.     movea.l    a0,a2
  74.     adda.l    d0,a2
  75.  
  76.     moveq.l    #0,d1            *1ライン上への差分 line_byte
  77.     move.w    line_byte(pc),d1
  78.  
  79.     move.w    tate(pc),d2        *縦ループ数 tate/2-1
  80.     lsr.w    #1,d2
  81.     subq.w    #1,d2
  82.  
  83.     move.w    yoko(pc),d4
  84.     btst.l    #0,d4
  85.     beq    hanten7            *横ライン=偶数
  86.  
  87. hanten4:                *横ライン=奇数
  88.     lsr.w    #1,d4
  89.     subq.w    #1,d4
  90. hanten5:
  91.     move.w    d4,d3
  92.     movea.l    a0,a1
  93.     movea.l    a2,a3
  94. hanten6:
  95.     move.l    (a1),d0
  96.     move.l    (a3),(a1)+
  97.     move.l    d0,(a3)+
  98.     dbra.w    d3,hanten6
  99.     move.w    (a1),d0
  100.     move.w    (a3),(a1)+
  101.     move.w    d0,(a3)+
  102.     adda.l    d1,a0
  103.     suba.l    d1,a2
  104.     dbra.w    d2,hanten5
  105.     rts
  106.  
  107. hanten7:                *横ライン=偶数
  108.     lsr.w    #1,d4
  109.     subq.w    #1,d4
  110. hanten8:
  111.     move.w    d4,d3
  112.     movea.l    a0,a1
  113.     movea.l    a2,a3
  114. hanten9:
  115.     move.l    (a1),d0
  116.     move.l    (a3),(a1)+
  117.     move.l    d0,(a3)+
  118.     dbra.w    d3,hanten9
  119.     adda.l    d1,a0
  120.     suba.l    d1,a2
  121.     dbra.w    d2,hanten8
  122.     rts
  123.